<?php
/**
 * @package   auto_occasion
 * @subpackage 
 * @author    CMS
 * @copyright 2011
 * @license    All rights reserved
 */


/**
 * Classe permettant de lister / supprimer / initialiser / charger par id en prenant en paramètre le dao
 *actus
 */
class siteMapSrv {

    /**
     * Fonction permettant d'avoir la liste des départements, des villes et region
     *
    **/
    public static function get () {

       // localite
        $sql = "SELECT * FROM ao_departement ORDER BY Region ASC";

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }


    /**
     * Fonction permettant d'avoir la liste de région
     *
    **/
    public static function getRegion ($firstletter) {

       // localite
        $sql = " SELECT DISTINCT region, region_mots_cles FROM ao_departement  WHERE LEFT(region, 1) = '".$firstletter."'";
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }


    /**
     * Fonction permettant d'avoir la liste de departement
     *
    **/
    public static function getDepartement ($firstletter) {

       // localite
        $sql = " SELECT departement_nom, departement_num, `departement_mots_cles` FROM ao_departement   WHERE LEFT(departement_nom, 1) = '".$firstletter."'";

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }


    /**
     * Fonction permettant d'avoir la liste de ville
     *
    **/
    public static function getVille ($firstletter) {

       // localite
        $sql = " SELECT DISTINCT grande_ville, grande_ville_mots_cles FROM ao_departement  WHERE LEFT(grande_ville, 1) = '".$firstletter."'";

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }


    /**
     * Fonction permettant d'avoir la liste de toutes les marques
     *
    **/
    public static function getMarque () {

        $sql = "SELECT DISTINCT LOWER(marque_libelle)as marque_libelle, marque_id FROM ao_marque";

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }


    /**
     * Fonction permettant d'avoir la liste de toutes les marques par région 
     *
    **/
    public static function getMarqueLocalite ($firstletter) {

        $sql = "SELECT DISTINCT LOWER(marque_libelle)as marque_libelle, marque_id FROM ao_marque WHERE LEFT(marque_libelle, 1) = '".$firstletter."'";

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }

    /**
     * Fonction permettant d'avoir la liste de tous les modèles correpondant à une marque
     *
    **/

    public static function getModele ($marque) {

        $sql = " SELECT DISTINCT modele_id,modele_libelle FROM ao_modele  ";
        $sql.= " WHERE modele_marque =".$marque;

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }

    /**
     * Fonction permettant d'avoir la liste de toutes les annonces du site pour sitemap_pa
     *
    **/
    public static function getAnnonce() {

        $sql = " SELECT * FROM ao_voiture_occasion o";
        $sql.= " INNER JOIN ao_modele md ON o.Occas_Modele = md.modele_id";
        $sql.= " INNER JOIN ao_marque marq ON o.Occas_Marque = marq.marque_id";
        $sql.= " WHERE `Occas_Estpaye` = '1'" ;
        $sql.= " AND (`Occas_Valide` = '1'OR `Occas_Valide` = '2') ";
        $sql.= " AND (Occas_IDpartenaire = '0' OR Occas_IDpartenaire = '' OR Occas_IDpartenaire IS NULL)";
        $sql.= " AND (Occas_Partenaire = '0' OR Occas_Partenaire = '' OR Occas_Partenaire IS NULL)";
        $sql.= " GROUP BY IdOccasion";
        $sql.= " ORDER BY Occas_DateSaisie DESC";
        $sql.= " LIMIT 500";

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }

        /**
     * Fonction permettant d'avoir la liste de toutes les annonces du site pour sitemap_pa_partenaire
     *
    **/
    public static function getAnnoncePartenaire() {

        $sql = " SELECT * FROM ao_voiture_occasion o";
        $sql.= " INNER JOIN ao_modele md ON o.Occas_Modele = md.modele_id";
        $sql.= " INNER JOIN ao_marque marq ON o.Occas_Marque = marq.marque_id";
        $sql.= " WHERE `Occas_Estpaye` = '1'" ;
        $sql.= " AND (`Occas_Valide` = '1'OR `Occas_Valide` = '2') ";
        $sql.= " AND (Occas_IDpartenaire <> '0' AND Occas_IDpartenaire <> '')";
        $sql.= " AND (Occas_Partenaire <> '0' AND Occas_Partenaire <> '')" ;      
        $sql.= " GROUP BY IdOccasion";
        $sql.= " ORDER BY Occas_DateSaisie DESC";
        $sql.= " LIMIT 500";

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }

        /**
     * Fonction permettant d'avoir la liste des détails des annonces du site
     *
    **/
    public static function getDetailAnnonce($annonce) {
        $tResult = array();

        foreach($annonce as $item){

            $objet = new stdClass();
            $objet->marque    = ($item->marque_libelle!=''&& $item->marque_libelle!=NULL && $item->marque_libelle)?$item->marque_libelle:$item->Occas_AutreMarque;
            $objet->modele    = ($item->modele_libelle!=''&& $item->modele_libelle!=NULL && $item->modele_libelle)?$item->modele_libelle:$item->Occas_AutreModele;
            $objet->version   = $item->Occas_Version;
            $objet->annonceId = $item->IdOccasion;
            $objet->retour    = 0 ;
            $objet->page      = 0 ;
            $objet->numero    = 1 ;

            $tResult[] = $objet;
       }
       return $tResult;
    }

   /**
     * Fonction permettant d'avoir la liste des url des annonces du site
     *
    **/
    public static function getUrlAnnonce($res) {

        $tabUrl = array();
        foreach($res as $item){
            if($item->retour=='0' || $item->retour==0 || $item->retour==''){
                      $lien = 'http://www.auto_occasion.fr/'.rtrim(self::contenulienRewriter($item->marque.'-'.$item->modele.'-'.$item->version), '-').'/annonce-auto/'.$item->annonceId.'.html' ;
            }else{
                      $lien = 'http://www.auto_occasion.fr/'.rtrim(self::contenulienRewriter($item->marque.'-'.$item->modele.'-'.$item->version), '-').'/annonce-auto/'.$item->retour.'-'.$item->annonceId.'.html' ;
            }
            array_push($tabUrl,$lien);
       }
       return $tabUrl;

    }


    /**
     * Fonction permettant d'avoir la liste des essais pour sitemap_essai 
     *
    **/
    public static function getEssais() {

        $sql = " SELECT * FROM ao_marque";
        $sql.= " INNER JOIN ao_essais ON ess_iMarqueId = marque_id";
        $sql.= " WHERE ess_statut = '1'";
        $sql.= " GROUP BY marque_id" ;
        $sql.= " ORDER BY marque_ordre ASC, marque_libelle ASC ";

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }

   /**
     * Fonction permettant d'avoir la liste des modèles des essais  pour sitemap_essai 
     *
    **/
    public static function getModeleEssais($marque) {

        $sql = " SELECT * FROM ao_marque" ;
        $sql.= " LEFT JOIN ao_essais ON ess_iMarqueId = marque_id";
        $sql.= " LEFT JOIN ao_modele ON modele_id = ess_iModelId";
        $sql.= " WHERE ess_id  <> ''";
        $sql.= " AND ess_statut = '1' AND marque_id  =".$marque;
        $sql.= " ORDER BY marque_ordre ASC, marque_libelle ASC, modele_ordre ASC, modele_libelle ASC";

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;
    }

       /**
     * Fonction permettant d'avoir la liste des modèles des essais  pour sitemap_essai 
     *
    **/
    public static function getDetailModele($essai) {

        $tResult = array();

        foreach ($essai as $item){
            $objet = new stdClass();
            $objet->modele = self::New_url($item->modele_libelle);
            $objet->marque = $item->marque_libelle;
            $objet->version =self::New_url($item->ess_zVersion);
            $tResult[] = $objet;
        }
       return $tResult;
    }

    /**
     * Fonction permettant d'avoir la liste des url  des essais
     *
    **/
    public static function getUrlModele($res) {

        $tabUrl = array();
        foreach($res as $item){
            if($item->modele){
                if($item->version == "" ){
                      $lien      = self::url_comparatifSommaireModele($item->marque, $item->modele);
                }else{
                      $lien      = self::url_comparatifVersion($item->marque, $item->modele,$item->version);
                }
            }else{
                $item->modele    = "La-gamme";
                $lien            = self::url_comparatifSommaireModele($item->marque, $item->modele);       
            }
            array_push($tabUrl,$lien);
       }
       return $tabUrl;
    }

    /*
    *Fonction permettant de récupérer les chapitres d'un essai
    *
    */
       public static function getChapitre($idesssai) {

            $query = " SELECT ao_essais_chapitre.*, ao_chapitre_names.chap_name FROM ao_essais_chapitre";
            $query.= " INNER JOIN ao_chapitre_names  ON ao_chapitre_names.chap_name_id = ao_essais_chapitre.chap_name_id";
            $query.= " WHERE chap_ess_id = ".$idesssai;
            $query.= " ORDER BY  ao_essais_chapitre.chap_position ASC, ao_chapitre_names.chap_name ASC";

            $jdb     = jDb::getDbWidget();
            $tResult =  $jdb->fetchAll($query);

            return $tResult;

       }

    /*
    *Fonction permettant de récupérer les détails des champs de chapitre 
    *
    */
   public static function getDetailChapitre($chapitre) {

        $tResult = array();

        foreach ($chapitre as $item){
            $objet = new stdClass();
            $objet->titre  = $item->chap_name;
            $objet->chap_id= $item->chap_id;
            $tResult[] = $objet;
        }
       return $tResult;

   }

   /**
     * Fonction permettant d'avoir l'URL de chapitre 
     *
    **/
   public static function getUrlChapitre($res) {
      $tabUrl = array();

      foreach($res as $item){
            if(isset($item->version)){
                $marqueModele   = strtolower($item->modele)."-";
                $Version        = str_replace($item->marque,"",strtolower($item->version));
                $Version        = str_replace($marqueModele,"",strtolower($Version));
                $Version        = str_replace($item->marque,"",strtolower($Version));
                $Version        = str_replace("-"," ",$Version);
            }else{
                $Version = "";
            }

            $sql = "SELECT * FROM ao_essais ";
            $sql.=" LEFT JOIN ao_marque  ON marque_id = ess_iMarqueId";
            $sql.=" LEFT JOIN ao_modele ON modele_id = ess_iModelId";
            $sql.=" WHERE ao_marque.marque_libelle='".$item->marque."'";
            $sql.=" AND ao_essais.ess_zVersion  ='".$Version."'";
            if(($item->modele) && ($item->modele!='La-gamme'))
              $sql.=" AND ao_modele.modele_libelle = '".$item->modele."'";
            else
              $sql.=" AND ao_essais.ess_iModelId = '0'";

            $jdb     = jDb::getDbWidget();
            $tResult =  $jdb->fetchAll($sql);
            foreach($tResult as $value){
                $type           = $value->ess_iTypeId;
                //essai_type = 1 chapitre
                if ($type == 1){
                    $essaiId        = $value->ess_id;
                    $chapitre       = self::getChapitre($essaiId);
                    $detailchapitre = self::getDetailChapitre($chapitre);

                    foreach($detailchapitre  as $detail) {
                       $lien    = self::url_comparatifChapitreDynamique($detail->titre, $item->marque, $item->modele, $Version, $detail->chap_id);
                       array_push($tabUrl,$lien);
                    }
                }

            }
      }
      return($tabUrl);
   }

    /**
     * Fonction permettant d'avoir la liste des énergies 
     *
    **/
    public static function getEnergie() {

        $sql = "SELECT id, LOWER(name) as name  FROM ao_carburation order by name";
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }

        /**
     * Fonction permettant d'avoir la liste des groupes
     *
    **/
    public static function getGroupe() {

        $sql = "SELECT catV_id, catV_zLibelle  FROM ao_categorie_voitures order by catV_zLibelle";
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;

    }



    public  static function contenulienRewriter($texte){

        $NouveauTexte = strtr($texte, " ", "-") ;
        $arraySpecialChar = array("<",">","=","@","{","}","`","^","¨","µ","¤","~","²","?",":","§","%","\/","$","£","€","/","*","+","|","(",")","[","]","’","'","#","°");
        $NouveauTexte = str_replace($arraySpecialChar, "", utf8_decode($NouveauTexte)) ;
        $NouveauTexte = str_replace($arraySpecialChar, "", ($NouveauTexte)) ;

        //Remplace tous les caractères non alphanumériques
        $NouveauTexte = eregi_replace("[^A-Z0-9\ ]", "-", $NouveauTexte);
        $NouveauTexte = self::New_url($NouveauTexte) ;  
        $NouveauTexte = strtolower($NouveauTexte) ;

        return $NouveauTexte ;
    }

    public static function New_url($url){
        $url = str_replace("...","",$url);
        $url = str_replace("!","",$url);
        $url = str_replace("&","",$url);
        $url = strtr($url," ',:","----aaaeeeeiiuuooc");
        $url = str_replace("---","-",$url);
        $url = str_replace("--","-",$url);
        return $url;
    }


    //Sommaire - IdEssai
    public static function url_comparatifSommaireEssaiId($idessai){

        $lien = 'http://www.auto-occasion.fr/essai/essai-sommaire-'.$idessai.'.html' ;
        return $lien ;  
    }


    //Sommaire - modele
    public static function url_comparatifSommaireModele($marque, $modele){

        $lien = 'http://www.auto-occasion.fr/essai/'.($marque).'/essai-sommaire-'.($marque.'-'.$modele).'.html' ;
        return $lien ;  
    }
    //

    //Sommaire - version
    public static function url_comparatifSommaireVersion($marque, $modele, $version){
        if($version!=""){
            $lien = self::url_comparatifVersion($marque, $modele, $version);
        }else{
            $lien = self::url_comparatifSommaireModele($marque, $modele);
        }
        return $lien ;  
    }
    //      
        
    //Gamme
    public static function url_comparatifGamme($marque){
        $lien = self::url_comparatifSommaireModele($marque, "La-gamme") ;
        return $lien ;  
    }
    //  

    //Gamme - Id
    public static function url_comparatifGammeId($marque, $id){

        $lien = 'http://www.auto-occasion.fr/essai/'.($marque).'/essai-La-gamme-'.($marque).'-'.($id).'.html' ;
        return $lien ;  
    }
    //          

    //Chapitre - Idguide et Id
    public static function url_comparatifChapitreIdessaiId($idessai, $id, $titre){

        $lien = 'http://www.auto-occasion.fr/essai/essai-chapitre-'.$idessai.'-'.$id.'-'.$titre.'.html' ;
        return $lien ;  
    }
    //              
        
    //Sommaire - Version
    public static function url_comparatifVersion($marque, $modele, $version){

        $lien = 'http://www.auto-occasion.fr/essai/'.($marque).','.($modele).'/essai-sommaire-'.($marque.'-'.$modele.'-'.$version).'.html' ;
        return $lien ;  
    }
    //


    //Chapitre dynamique
    public static function url_comparatifChapitreDynamique($titre, $marque, $modele, $version, $id){

        if($version!=""){
          $lien = 'http://www.auto-occasion.fr/essai/'.($marque).','.($modele).','.($version).'/essai-'.($marque.'-'.$modele).'-'.($titre).'-'.($id).'.html';      
        }else{
          $lien = 'http://www.auto-occasion.fr/essai/'.($marque).','.($modele).'/essai-'.($marque.'-'.$modele).'-'.($titre).'-'.($id).'.html'; 
        }
        return $lien ;  
    }
    //      

    //Version - Id
    public static function url_comparatifVersionId($marque, $modele, $version, $id){
        if($modele=="La-gamme"){
            return self::url_comparatifGammeId($marque, $id);
        }else{
            $lien = self::url_comparatifChapitreDynamique("Version", $marque, $modele, $version, $id);
        }
        
        return $lien ;  
    }
    //  
            

    //Fiabilité
    public static function url_comparatifFiabilite($marque, $modele, $version, $id){
        $lien =  self::url_comparatifChapitreDynamique("Fiabilite", $marque, $modele, $version, $id);
        return $lien ;  
    }
    //          
            
    //Equipements
    public static function url_comparatifEquipements($marque, $modele, $version, $id){
        $lien =  self::url_comparatifChapitreDynamique("Equipements", $marque, $modele, $version, $id);
        return $lien ;  
    }


    //Catégorie
    public static function url_comparatifCategorie($id, $titre){
        $lien = 'http://www.auto-occasion.fr/essai/essai-categorie-'.($id.'-'.$titre).'.html' ;
        return $lien ;  
    }
    //          

    //Liste modèle
    public static function url_comparatifListeModele($marque){
        $lien = 'http://www.auto-occasion.fr/essai/essai-marque-'.($marque).'.html' ;
        return $lien ;  
    }


    /**
     * Création du fichier xml
     *
     */
    public static function create($xml, $filename = 'sitemap.xml') {
        try {
            $file = fopen(JELIX_APP_WWW_PATH . PATH_SITEMAP . $filename, "w+");
            fwrite($file, $xml);
            fclose($file);
        } catch (exception $e) {
            die($e->getMessage());
        }
    }

}